// 对于axios中的函数库进行二次封装
// 面试题：你工作的时候是否有过二次封装axios的经历，目的是什么？
// 目的1：利用axios自带的请求以及响应拦截器功能，对于请求体和响应体进行自定义操作
// 目的2：请求拦截器一般可以在请求头中携带公共的参数，比如token
// 目的3：响应拦截器可以简化服务器返回的数据，也可以处理一些http网络错误

// 首先引入axios
import axios from "axios";
import { Message } from "@arco-design/web-vue";

// 创建一个axios实例，可以设置基础路径、超时时间的设置
const request = axios.create({
  baseURL: "/api", //请求的基本路径
  timeout: 5000, //超时时间的配置
  headers: {},
});

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    return response.data;
  },
  (error) => {
    let status = error.response.status;
    switch (status) {
      case 404: {
        Message.error(error.message);
        break;
      }
      case 401: {
        Message.error("请求参数有误");
        break;
      }
      case 501 | 502 | 503 | 504: {
        Message.error("服务器异常");
        break;
      }
    }
    return Promise.reject(new Error(error.message));
  }
);

// 务必对外暴露你生成的axios实例
export default request;
